// @ES6允许使用箭头定义函数
// # 箭头函数适合与this无关的回调,如定时器,数组的方法回调
// # 箭头函数不适合与this有关的回调,如dom事件回调,对象的方法


// 声明一个函数
let fn1 = function () {

}

let fn2 = (a, b) => {
  return a + b
}
let result = fn2(1, 2)
console.log(result); //3

// # 1.this是静态的,this始终指向函数声明时所在作用域下的this值
function getName() {
  console.log(this.name);
}

let getName2 = () => {
  console.log(this.name);
}

// 设置window的对象name属性
window.name = 'luck';
const school = {
  name: 'school',
}

// 直接调用
// ! 普通函数直接调用this指向window
// ! 箭头函数在全局作用域下声明的,this指向window
getName(); //luck
getName2(); //luck

// call方法调用
// ! 箭头函数this值是静态的,this始终指向函数在声明对象的this值
getName.call(school); //school
getName2.call(school); //luck

// # 2.不能作为构造函数实例化对象
let Person = (name, age) => {
  this.name = name;
  this.age = age;
}

// let me = new Person('七', 23);
// console.log(me); //Person is not a constructor

// # 3.不能使用arguments变量
// let fn3 = () => {
//   console.log(arguments); //arguments is not defined
// }
// fn3(124)

// # 4.箭头函数简写
// # 1)省略小括号,当形参有且仅有一个
// # 2)省略花括号,当代码体只有一条语句的时候,return必须省略,语句的执行结果就是函数的返回值
let pow = (n) => n * n;
console.log(pow(1)); //1